<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>18.构造函数创建对象的方式</title>
</head>

<body>
  <script>
    //和工厂函数相似构造函数也用于创建对象，它的上下文为新的对象实例。

    /*- 构造函数名每个单词首字母大写即Pascal 命名规范
      - this指当前创建的对象
      - 不需要返回this系统会自动完成
      - 需要使用new关键词生成对象*/
    "use strict";

    function User (name) {
      this.name = name;
      this.show = function () {
        console.log(this);
        console.log(this.name);

      };
      //不需要返回，系统会自动返回
      // return this;
    }

    const xj = new User("向军");
    xj.show();
    // 将对象的方法复制给变量，User对象的this会指向window(this指向了调用它的对象)
    // 严格模式下，User对象的this会返回undifined 防止无意修改了window对象
    let func = xj.show;
    func(); // 普通情况下this指向window，严格模式下this为undefined
  </script>
</body>

</html>